package com.xinheyun.demo.leetcode;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @description: TODO
 * @author: Sarah
 * @modified By: Sarah
 * @date: Created in 2021/8/30 11:55
 * @version:v1.0
 */
//给你一个正整数数组 nums ，请你从中删除一个含有 若干不同元素 的子数组。删除子数组的 得分 就是子数组各元素之 和 。
//
//    返回 只删除一个 子数组可获得的 最大得分 。
//
//    如果数组 b 是数组 a 的一个连续子序列，即如果它等于 a[l],a[l+1],...,a[r] ，那么它就是 a 的一个子数组。
//输入：nums = [4,2,4,5,6]
//    输出：17
//    解释：最优子数组是 [2,4,5,6]

public class test1695 {

    public static void main(String[] args) {
        int[] nums = {4,2,4,5,6};
        test1695 test1695 = new test1695();
        System.out.println(test1695.maximumUniqueSubarray(nums));

    }

    public int maximumUniqueSubarray(int[] nums) {
        int ans = 0;
        int sum = 0;
        int low=0,high=0;
        Set<Integer> queue = new HashSet<Integer>();
        for (int i = 0; i < nums.length; i++) {
            while (queue.contains(nums[i])) {
                queue.remove(nums[low]);
                ans = ans - nums[low];
                low++;
            }
            queue.add(nums[i]);
            high++;
            ans+=nums[i];
            if(ans > sum){
                sum=ans;
            }
        }
        return sum;
    }


}
